gem5  v21.1.0.1
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
evs.hh
Go to the documentation of this file.
1 /*
2  * Copyright 2020 Google, Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met: redistributions of source code must retain the above copyright
7  * notice, this list of conditions and the following disclaimer;
8  * redistributions in binary form must reproduce the above copyright
9  * notice, this list of conditions and the following disclaimer in the
10  * documentation and/or other materials provided with the distribution;
11  * neither the name of the copyright holders nor the names of its
12  * contributors may be used to endorse or promote products derived from
13  * this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #ifndef __ARCH_ARM_FASTMODEL_CORTEXR52_EVS_HH__
29 #define __ARCH_ARM_FASTMODEL_CORTEXR52_EVS_HH__
30 
31 #include <memory>
32 
38 #include "dev/intpin.hh"
39 #include "mem/port_proxy.hh"
40 #include "params/FastModelScxEvsCortexR52x1.hh"
41 #include "params/FastModelScxEvsCortexR52x2.hh"
42 #include "params/FastModelScxEvsCortexR52x3.hh"
43 #include "params/FastModelScxEvsCortexR52x4.hh"
44 #include "scx_evs_CortexR52x1.h"
45 #include "scx_evs_CortexR52x2.h"
46 #include "scx_evs_CortexR52x3.h"
47 #include "scx_evs_CortexR52x4.h"
51 
52 namespace gem5
53 {
54 
55 GEM5_DEPRECATED_NAMESPACE(FastModel, fastmodel);
56 namespace fastmodel
57 {
58 
59 class CortexR52Cluster;
60 
61 template <class Types>
63 {
64  private:
65  static const int CoreCount = Types::CoreCount;
66  static const int PpiCount = 9;
67  static const int SpiCount = 960;
68  using Base = typename Types::Base;
69  using Params = typename Types::Params;
71 
73 
76 
77  // A structure to collect per-core connections, and also plumb up PPIs.
78  struct CorePins
79  {
81 
82  std::string name;
83  Evs *evs;
84  int cpu;
85 
86  CorePins(Evs *_evs, int _cpu);
87 
88  void
90  {
91  evs->signalInterrupt->ppi(cpu, num, true);
92  }
93 
94  void
96  {
97  evs->signalInterrupt->ppi(cpu, num, false);
98  }
99 
101 
105  };
106 
108 
110 
112 
114 
115  const Params &params;
116 
117  public:
118  ScxEvsCortexR52(const Params &p) : ScxEvsCortexR52(p.name.c_str(), p) {}
119  ScxEvsCortexR52(const sc_core::sc_module_name &mod_name, const Params &p);
120 
121  void
123  {
124  this->signalInterrupt->spi(num, true);
125  }
126 
127  void
129  {
130  this->signalInterrupt->spi(num, false);
131  }
132 
133  Port &gem5_getPort(const std::string &if_name, int idx) override;
134 
135  void
137  {
138  Base::end_of_elaboration();
139  Base::start_of_simulation();
140  }
141  void start_of_simulation() override {}
142 
143  void sendFunc(PacketPtr pkt) override;
144 
145  void setClkPeriod(Tick clk_period) override;
146 
147  void setSysCounterFrq(uint64_t sys_counter_frq) override;
148 
149  void setCluster(SimObject *cluster) override;
150 };
151 
153 {
154  using Base = scx_evs_CortexR52x1;
155  using Params = FastModelScxEvsCortexR52x1Params;
156  static const int CoreCount = 1;
157 };
159 extern template class ScxEvsCortexR52<ScxEvsCortexR52x1Types>;
160 
162 {
163  using Base = scx_evs_CortexR52x2;
164  using Params = FastModelScxEvsCortexR52x2Params;
165  static const int CoreCount = 2;
166 };
168 extern template class ScxEvsCortexR52<ScxEvsCortexR52x2Types>;
169 
171 {
172  using Base = scx_evs_CortexR52x3;
173  using Params = FastModelScxEvsCortexR52x3Params;
174  static const int CoreCount = 3;
175 };
177 extern template class ScxEvsCortexR52<ScxEvsCortexR52x3Types>;
178 
180 {
181  using Base = scx_evs_CortexR52x4;
182  using Params = FastModelScxEvsCortexR52x4Params;
183  static const int CoreCount = 4;
184 };
186 extern template class ScxEvsCortexR52<ScxEvsCortexR52x4Types>;
187 
188 } // namespace fastmodel
189 } // namespace gem5
190 
191 #endif // __ARCH_ARM_FASTMODEL_CORTEXR52_EVS_HH__
gem5::fastmodel::ScxEvsCortexR52x3Types::Base
scx_evs_CortexR52x3 Base
Definition: evs.hh:172
gem5::fastmodel::ScxEvsCortexR52::end_of_elaboration
void end_of_elaboration() override
Definition: evs.hh:136
gem5::fastmodel::ScxEvsCortexR52::setSysCounterFrq
void setSysCounterFrq(uint64_t sys_counter_frq) override
Definition: evs.cc:52
gem5::fastmodel::ScxEvsCortexR52::CorePins::lowerInterruptPin
void lowerInterruptPin(int num)
Definition: evs.hh:95
gem5::fastmodel::ScxEvsCortexR52::CorePins::ppis
std::vector< std::unique_ptr< CoreInt > > ppis
Definition: evs.hh:100
gem5::fastmodel::ScxEvsCortexR52::spis
std::vector< std::unique_ptr< ClstrInt > > spis
Definition: evs.hh:111
gem5::fastmodel::ScxEvsCortexR52::SpiCount
static const int SpiCount
Definition: evs.hh:67
gem5::fastmodel::ScxEvsCortexR52::CorePins::name
std::string name
Definition: evs.hh:82
gem5::fastmodel::ScxEvsCortexR52x1Types::CoreCount
static const int CoreCount
Definition: evs.hh:156
gem5::fastmodel::ScxEvsCortexR52::CorePins::amba
AmbaInitiator amba
Definition: evs.hh:104
gem5::fastmodel::ScxEvsCortexR52::CorePins::llpp
AmbaInitiator llpp
Definition: evs.hh:102
gem5::fastmodel::ScxEvsCortexR52::CorePins::cpu
int cpu
Definition: evs.hh:84
gem5::fastmodel::ScxEvsCortexR52::clockRateControl
ClockRateControlInitiatorSocket clockRateControl
Definition: evs.hh:74
gem5::Iris::BaseCpuEvs
Definition: cpu.hh:47
gem5::fastmodel::ScxEvsCortexR52::gem5CpuCluster
CortexR52Cluster * gem5CpuCluster
Definition: evs.hh:113
gem5::fastmodel::ScxEvsCortexR52::PpiCount
static const int PpiCount
Definition: evs.hh:66
std::vector
STL vector class.
Definition: stl.hh:37
gem5::fastmodel::ScxEvsCortexR52::params
const Params & params
Definition: evs.hh:115
gem5::fastmodel::ScxEvsCortexR52x2Types
Definition: evs.hh:161
gem5::fastmodel::ScxEvsCortexR52x4Types::Params
FastModelScxEvsCortexR52x4Params Params
Definition: evs.hh:182
gem5::fastmodel::ScxEvsCortexR52x3Types
Definition: evs.hh:170
cpu.hh
gem5::fastmodel::ScxEvsCortexR52x2Types::Params
FastModelScxEvsCortexR52x2Params Params
Definition: evs.hh:164
gem5::fastmodel::ScxEvsCortexR52::sendFunc
void sendFunc(PacketPtr pkt) override
Definition: evs.cc:100
gem5::fastmodel::ScxEvsCortexR52::Base
typename Types::Base Base
Definition: evs.hh:68
gem5::fastmodel::ScxEvsCortexR52::CorePins::raiseInterruptPin
void raiseInterruptPin(int num)
Definition: evs.hh:89
gem5::ClockRateControlInitiatorSocket
Definition: exported_clock_rate_control.hh:63
gem5::fastmodel::ScxEvsCortexR52::CoreCount
static const int CoreCount
Definition: evs.hh:65
gem5::fastmodel::ScxEvsCortexR52::raiseInterruptPin
void raiseInterruptPin(int num)
Definition: evs.hh:122
gem5::fastmodel::ScxEvsCortexR52::CorePins
Definition: evs.hh:78
sc_event.hh
gem5::auxv::Base
@ Base
Definition: aux_vector.hh:76
gem5::fastmodel::ScxEvsCortexR52::CorePins::evs
Evs * evs
Definition: evs.hh:83
gem5::Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:283
gem5::MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:326
gem5::Tick
uint64_t Tick
Tick count type.
Definition: types.hh:58
port_proxy.hh
gem5::fastmodel::ScxEvsCortexR52x2Types::Base
scx_evs_CortexR52x2 Base
Definition: evs.hh:163
gem5::fastmodel::ScxEvsCortexR52::setCluster
void setCluster(SimObject *cluster) override
Definition: evs.cc:59
gem5::fastmodel::ScxEvsCortexR52::ScxEvsCortexR52
ScxEvsCortexR52(const Params &p)
Definition: evs.hh:118
sc_core::sc_module_name
Definition: sc_module_name.hh:41
gem5::fastmodel::ScxEvsCortexR52::Params
typename Types::Params Params
Definition: evs.hh:69
gem5::SimObject
Abstract superclass for simulation objects.
Definition: sim_object.hh:146
gem5::GEM5_DEPRECATED_NAMESPACE
GEM5_DEPRECATED_NAMESPACE(GuestABI, guest_abi)
signal_interrupt.hh
gem5::fastmodel::CortexR52Cluster
Definition: cortex_r52.hh:79
name
const std::string & name()
Definition: trace.cc:49
sc_module.hh
amba_ports.hh
gem5::fastmodel::ScxEvsCortexR52::lowerInterruptPin
void lowerInterruptPin(int num)
Definition: evs.hh:128
gem5::fastmodel::ScxEvsCortexR52x1Types::Params
FastModelScxEvsCortexR52x1Params Params
Definition: evs.hh:155
gem5::fastmodel::ScxEvsCortexR52::SC_HAS_PROCESS
SC_HAS_PROCESS(ScxEvsCortexR52)
gem5::fastmodel::ScxEvsCortexR52::signalInterrupt
SignalInterruptInitiatorSocket signalInterrupt
Definition: evs.hh:75
gem5::fastmodel::ScxEvsCortexR52::start_of_simulation
void start_of_simulation() override
Definition: evs.hh:141
gem5::Port
Ports are used to interface objects to each other.
Definition: port.hh:61
gem5::fastmodel::ScxEvsCortexR52x4Types
Definition: evs.hh:179
sc_gem5::TlmInitiatorBaseWrapper
Definition: tlm_port_wrapper.hh:40
gem5::fastmodel::ScxEvsCortexR52x4Types::Base
scx_evs_CortexR52x4 Base
Definition: evs.hh:181
gem5::IntSinkPin
Definition: intpin.hh:78
gem5::fastmodel::ScxEvsCortexR52::corePins
std::vector< std::unique_ptr< CorePins > > corePins
Definition: evs.hh:107
gem5::fastmodel::ScxEvsCortexR52x1Types::Base
scx_evs_CortexR52x1 Base
Definition: evs.hh:154
gem5::fastmodel::ScxEvsCortexR52::CorePins::CorePins
CorePins(Evs *_evs, int _cpu)
Definition: evs.cc:66
exported_clock_rate_control.hh
gem5::fastmodel::ScxEvsCortexR52x1Types
Definition: evs.hh:152
tlm_port_wrapper.hh
gem5::fastmodel::ScxEvsCortexR52::CorePins::flash
AmbaInitiator flash
Definition: evs.hh:103
intpin.hh
gem5::SignalInterruptInitiatorSocket
Definition: signal_interrupt.hh:60
gem5::fastmodel::ScxEvsCortexR52::gem5_getPort
Port & gem5_getPort(const std::string &if_name, int idx) override
Definition: evs.cc:110
signal_receiver.hh
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: decoder.cc:40
gem5::fastmodel::ScxEvsCortexR52x3Types::Params
FastModelScxEvsCortexR52x3Params Params
Definition: evs.hh:173
gem5::fastmodel::ScxEvsCortexR52::setClkPeriod
void setClkPeriod(Tick clk_period) override
Definition: evs.cc:45
gem5::fastmodel::ScxEvsCortexR52
Definition: evs.hh:62

Generated on Tue Sep 7 2021 14:53:39 for gem5 by doxygen 1.8.17