gem5  [DEVELOP-FOR-23.0]
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 
39 #include "dev/intpin.hh"
40 #include "mem/port_proxy.hh"
41 #include "params/FastModelScxEvsCortexR52x1.hh"
42 #include "params/FastModelScxEvsCortexR52x2.hh"
43 #include "params/FastModelScxEvsCortexR52x3.hh"
44 #include "params/FastModelScxEvsCortexR52x4.hh"
45 #include "scx_evs_CortexR52x1.h"
46 #include "scx_evs_CortexR52x2.h"
47 #include "scx_evs_CortexR52x3.h"
48 #include "scx_evs_CortexR52x4.h"
49 #include "sim/signal.hh"
53 
54 namespace gem5
55 {
56 
57 namespace fastmodel
58 {
59 
60 class CortexR52Cluster;
61 
62 template <class Types>
64 {
65  private:
66  static const int CoreCount = Types::CoreCount;
67  static const int PpiCount = 9;
68  static const int SpiCount = 960;
69  using Base = typename Types::Base;
70  using Params = typename Types::Params;
72 
74 
77 
78  // A structure to collect per-core connections, and also plumb up PPIs.
79  struct CorePins
80  {
82  template <typename T>
83  using SignalInitiator = amba_pv::signal_master_port<T>;
84 
85  std::string name;
86  Evs *evs;
87  int cpu;
88 
89  CorePins(Evs *_evs, int _cpu);
90 
91  void
93  {
94  evs->signalInterrupt->ppi(cpu, num, true);
95  }
96 
97  void
99  {
100  evs->signalInterrupt->ppi(cpu, num, false);
101  }
102 
104 
108 
113 
115  };
116 
118 
120 
122 
124 
126 
128 
130 
132 
133  const Params &params;
134 
135  public:
136  ScxEvsCortexR52(const Params &p) : ScxEvsCortexR52(p.name.c_str(), p) {}
137  ScxEvsCortexR52(const sc_core::sc_module_name &mod_name, const Params &p);
138 
139  void
141  {
142  this->signalInterrupt->spi(num, true);
143  }
144 
145  void
147  {
148  this->signalInterrupt->spi(num, false);
149  }
150 
151  Port &gem5_getPort(const std::string &if_name, int idx) override;
152 
153  void
155  {
156  Base::end_of_elaboration();
157  Base::start_of_simulation();
158  }
159  void start_of_simulation() override {}
160 
161  void setClkPeriod(Tick clk_period) override;
162 
163  void setSysCounterFrq(uint64_t sys_counter_frq) override;
164 
165  void setCluster(SimObject *cluster) override;
166 
167  void setResetAddr(int core, Addr addr, bool secure) override;
168 };
169 
171 {
172  using Base = scx_evs_CortexR52x1;
173  using Params = FastModelScxEvsCortexR52x1Params;
174  static const int CoreCount = 1;
175 };
177 extern template class ScxEvsCortexR52<ScxEvsCortexR52x1Types>;
178 
180 {
181  using Base = scx_evs_CortexR52x2;
182  using Params = FastModelScxEvsCortexR52x2Params;
183  static const int CoreCount = 2;
184 };
186 extern template class ScxEvsCortexR52<ScxEvsCortexR52x2Types>;
187 
189 {
190  using Base = scx_evs_CortexR52x3;
191  using Params = FastModelScxEvsCortexR52x3Params;
192  static const int CoreCount = 3;
193 };
195 extern template class ScxEvsCortexR52<ScxEvsCortexR52x3Types>;
196 
198 {
199  using Base = scx_evs_CortexR52x4;
200  using Params = FastModelScxEvsCortexR52x4Params;
201  static const int CoreCount = 4;
202 };
204 extern template class ScxEvsCortexR52<ScxEvsCortexR52x4Types>;
205 
206 } // namespace fastmodel
207 } // namespace gem5
208 
209 #endif // __ARCH_ARM_FASTMODEL_CORTEXR52_EVS_HH__
gem5::fastmodel::ScxEvsCortexR52x3Types::Base
scx_evs_CortexR52x3 Base
Definition: evs.hh:190
gem5::fastmodel::ScxEvsCortexR52::CorePins::halt
SignalSender halt
Definition: evs.hh:111
gem5::fastmodel::ScxEvsCortexR52::end_of_elaboration
void end_of_elaboration() override
Definition: evs.hh:154
gem5::fastmodel::ScxEvsCortexR52::setResetAddr
void setResetAddr(int core, Addr addr, bool secure) override
Definition: evs.cc:66
gem5::fastmodel::ScxEvsCortexR52::setSysCounterFrq
void setSysCounterFrq(uint64_t sys_counter_frq) override
Definition: evs.cc:51
gem5::fastmodel::ScxEvsCortexR52::CorePins::lowerInterruptPin
void lowerInterruptPin(int num)
Definition: evs.hh:98
gem5::fastmodel::ScxEvsCortexR52::CorePins::ppis
std::vector< std::unique_ptr< CoreInt > > ppis
Definition: evs.hh:103
gem5::fastmodel::ScxEvsCortexR52::spis
std::vector< std::unique_ptr< ClstrInt > > spis
Definition: evs.hh:121
gem5::fastmodel::ScxEvsCortexR52::SpiCount
static const int SpiCount
Definition: evs.hh:68
gem5::fastmodel::ScxEvsCortexR52::CorePins::name
std::string name
Definition: evs.hh:85
gem5::fastmodel::ScxEvsCortexR52x1Types::CoreCount
static const int CoreCount
Definition: evs.hh:174
gem5::fastmodel::ScxEvsCortexR52::CorePins::amba
AmbaInitiator amba
Definition: evs.hh:107
gem5::fastmodel::ScxEvsCortexR52::CorePins::llpp
AmbaInitiator llpp
Definition: evs.hh:105
gem5::fastmodel::ScxEvsCortexR52::CorePins::cpu
int cpu
Definition: evs.hh:87
gem5::fastmodel::ScxEvsCortexR52::clockRateControl
ClockRateControlInitiatorSocket clockRateControl
Definition: evs.hh:75
gem5::Iris::BaseCpuEvs
Definition: cpu.hh:47
gem5::fastmodel::ScxEvsCortexR52::gem5CpuCluster
CortexR52Cluster * gem5CpuCluster
Definition: evs.hh:131
gem5::fastmodel::ScxEvsCortexR52::CorePins::poweron_reset
SignalSender poweron_reset
Definition: evs.hh:110
gem5::fastmodel::ScxEvsCortexR52::PpiCount
static const int PpiCount
Definition: evs.hh:67
gem5::fastmodel::ScxEvsCortexR52::ext_slave
AmbaTarget ext_slave
Definition: evs.hh:123
std::vector
STL vector class.
Definition: stl.hh:37
signal_sender.hh
gem5::fastmodel::ScxEvsCortexR52::params
const Params & params
Definition: evs.hh:133
gem5::fastmodel::ScxEvsCortexR52x2Types
Definition: evs.hh:179
gem5::fastmodel::ScxEvsCortexR52x4Types::Params
FastModelScxEvsCortexR52x4Params Params
Definition: evs.hh:200
gem5::fastmodel::ScxEvsCortexR52x3Types
Definition: evs.hh:188
cpu.hh
gem5::fastmodel::ScxEvsCortexR52x2Types::Params
FastModelScxEvsCortexR52x2Params Params
Definition: evs.hh:182
gem5::fastmodel::ScxEvsCortexR52::Base
typename Types::Base Base
Definition: evs.hh:69
gem5::fastmodel::ScxEvsCortexR52::CorePins::raiseInterruptPin
void raiseInterruptPin(int num)
Definition: evs.hh:92
gem5::ClockRateControlInitiatorSocket
Definition: exported_clock_rate_control.hh:63
gem5::fastmodel::ScxEvsCortexR52::CoreCount
static const int CoreCount
Definition: evs.hh:66
gem5::fastmodel::ScxEvsCortexR52::raiseInterruptPin
void raiseInterruptPin(int num)
Definition: evs.hh:140
gem5::fastmodel::ScxEvsCortexR52::CorePins
Definition: evs.hh:79
sc_event.hh
gem5::auxv::Base
@ Base
Definition: aux_vector.hh:74
gem5::fastmodel::SignalSender
Definition: signal_sender.hh:44
gem5::fastmodel::ScxEvsCortexR52::CorePins::evs
Evs * evs
Definition: evs.hh:86
gem5::VegaISA::p
Bitfield< 54 > p
Definition: pagetable.hh:70
gem5::Tick
uint64_t Tick
Tick count type.
Definition: types.hh:58
gem5::fastmodel::ScxEvsCortexR52::CorePins::cfgvectable
SignalInitiator< uint64_t > cfgvectable
Definition: evs.hh:114
port_proxy.hh
gem5::fastmodel::ScxEvsCortexR52x2Types::Base
scx_evs_CortexR52x2 Base
Definition: evs.hh:181
gem5::fastmodel::ScxEvsCortexR52::setCluster
void setCluster(SimObject *cluster) override
Definition: evs.cc:58
gem5::fastmodel::ScxEvsCortexR52::ScxEvsCortexR52
ScxEvsCortexR52(const Params &p)
Definition: evs.hh:136
sc_core::sc_module_name
Definition: sc_module_name.hh:41
gem5::fastmodel::ScxEvsCortexR52::Params
typename Types::Params Params
Definition: evs.hh:70
gem5::SimObject
Abstract superclass for simulation objects.
Definition: sim_object.hh:146
gem5::fastmodel::SignalReceiverInt
Definition: signal_receiver.hh:86
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
gem5::fastmodel::ScxEvsCortexR52::dbg_reset
SignalSender dbg_reset
Definition: evs.hh:127
signal_interrupt.hh
gem5::fastmodel::CortexR52Cluster
Definition: cortex_r52.hh:80
name
const std::string & name()
Definition: trace.cc:48
sc_module.hh
amba_ports.hh
gem5::fastmodel::ScxEvsCortexR52::lowerInterruptPin
void lowerInterruptPin(int num)
Definition: evs.hh:146
gem5::SignalSinkPort< bool >
gem5::fastmodel::ScxEvsCortexR52x1Types::Params
FastModelScxEvsCortexR52x1Params Params
Definition: evs.hh:173
gem5::fastmodel::ScxEvsCortexR52::SC_HAS_PROCESS
SC_HAS_PROCESS(ScxEvsCortexR52)
gem5::fastmodel::ScxEvsCortexR52::signalInterrupt
SignalInterruptInitiatorSocket signalInterrupt
Definition: evs.hh:76
gem5::fastmodel::ScxEvsCortexR52::start_of_simulation
void start_of_simulation() override
Definition: evs.hh:159
gem5::fastmodel::ScxEvsCortexR52::CorePins::core_reset
SignalSender core_reset
Definition: evs.hh:109
gem5::Port
Ports are used to interface objects to each other.
Definition: port.hh:61
gem5::fastmodel::ScxEvsCortexR52::CorePins::standbywfi
SignalReceiverInt standbywfi
Definition: evs.hh:112
gem5::fastmodel::ScxEvsCortexR52x4Types
Definition: evs.hh:197
sc_gem5::TlmInitiatorBaseWrapper
Definition: tlm_port_wrapper.hh:40
gem5::fastmodel::ScxEvsCortexR52::top_reset
SignalSender top_reset
Definition: evs.hh:125
gem5::fastmodel::ScxEvsCortexR52x4Types::Base
scx_evs_CortexR52x4 Base
Definition: evs.hh:199
signal.hh
gem5::fastmodel::ScxEvsCortexR52::corePins
std::vector< std::unique_ptr< CorePins > > corePins
Definition: evs.hh:117
gem5::fastmodel::ScxEvsCortexR52x1Types::Base
scx_evs_CortexR52x1 Base
Definition: evs.hh:172
gem5::fastmodel::ScxEvsCortexR52::CorePins::CorePins
CorePins(Evs *_evs, int _cpu)
Definition: evs.cc:72
exported_clock_rate_control.hh
gem5::fastmodel::ScxEvsCortexR52x1Types
Definition: evs.hh:170
gem5::fastmodel::ScxEvsCortexR52::model_reset
SignalSinkPort< bool > model_reset
Definition: evs.hh:129
tlm_port_wrapper.hh
gem5::fastmodel::ScxEvsCortexR52::CorePins::flash
AmbaInitiator flash
Definition: evs.hh:106
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:133
signal_receiver.hh
gem5::fastmodel::ScxEvsCortexR52::CorePins::SignalInitiator
amba_pv::signal_master_port< T > SignalInitiator
Definition: evs.hh:83
sc_gem5::TlmTargetBaseWrapper
Definition: tlm_port_wrapper.hh:44
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::fastmodel::ScxEvsCortexR52x3Types::Params
FastModelScxEvsCortexR52x3Params Params
Definition: evs.hh:191
gem5::fastmodel::ScxEvsCortexR52::setClkPeriod
void setClkPeriod(Tick clk_period) override
Definition: evs.cc:44
gem5::fastmodel::ScxEvsCortexR52
Definition: evs.hh:63
gem5::X86ISA::addr
Bitfield< 3 > addr
Definition: types.hh:84
gem5::IntSinkPinBase
Definition: intpin.hh:38

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