gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
gic.cc
Go to the documentation of this file.
1 /*
2  * Copyright 2019 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 
29 
30 #include "base/trace.hh"
31 #include "params/FastModelGIC.hh"
32 #include "params/SCFastModelGIC.hh"
33 
34 namespace gem5
35 {
36 
37 namespace fastmodel
38 {
39 
40 int
42 {
43  int count = 0;
44  for (auto &init: inits)
45  if (!init.get_port_base().size())
46  count++;
47  return count;
48 }
49 
51  sc_core::sc_module_name _name, Initiators &inits) :
52  sc_core::sc_module(_name),
53  targets("targets", countUnbound(inits))
54 {
55  // For every unbound initiator socket, connected it to one
56  // terminator target socket.
57  int i = 0;
58  for (auto &init: inits) {
59  if (!init.get_port_base().size()) {
60  auto &term = targets.at(i++);
61  term.bind(*this);
62  term.bind(init);
63  }
64  }
65 }
66 
67 void
68 SCGIC::Terminator::sendTowardsCPU(uint8_t len, const uint8_t *data)
69 {
70  panic("Call to terminated interface!");
71 }
72 
73 SCGIC::SCGIC(const SCFastModelGICParams &params,
75  : scx_evs_GIC(_name), _params(params),
76  resetPort(params.name + ".reset", 0),
77  poResetPort(params.name + ".po_reset", 0)
78 {
79  signalInterrupt.bind(signal_interrupt);
80 
81  resetPort.signal_out.bind(scx_evs_GIC::normal_reset);
82  poResetPort.signal_out.bind(scx_evs_GIC::po_reset);
83 
84  for (int i = 0; i < wake_request.size(); i++) {
85  wakeRequests.emplace_back(
86  new SignalReceiver(csprintf("%s.wakerequest[%d]", name(), i)));
87  wake_request[i].bind(wakeRequests[i]->signal_in);
88  }
89 
90  set_parameter("gic.enabled", params.enabled);
91  set_parameter("gic.has-gicv3", params.has_gicv3);
92  set_parameter("gic.has-gicv4.1", params.has_gicv4_1);
93  set_parameter("gic.vPEID-bits", params.vPEID_bits);
94  set_parameter("gic.print-memory-map", params.print_mmap);
95  set_parameter("gic.monolithic", params.monolithic);
96  set_parameter("gic.direct-lpi-support", params.direct_lpi_support);
97  set_parameter("gic.CPU-affinities", params.cpu_affinities);
98  set_parameter("gic.non-ARE-core-count", params.non_ARE_core_count);
99  set_parameter("gic.reg-base", params.reg_base);
100  set_parameter("gic.reg-base-per-redistributor",
101  params.reg_base_per_redistributor);
102  set_parameter("gic.GICD-alias", params.gicd_alias);
103  set_parameter("gic.has-two-security-states",
104  params.has_two_security_states);
105  set_parameter("gic.DS-fixed-to-zero", params.DS_fixed_to_zero);
106  set_parameter("gic.IIDR", params.IIDR);
107  set_parameter("gic.gicv2-only", params.gicv2_only);
108  set_parameter("gic.STATUSR-implemented", params.STATUSR_implemented);
109  set_parameter("gic.priority-bits",
110  params.priority_bits_implemented);
111  set_parameter("gic.GICD_ITARGETSR-RAZWI", params.itargets_razwi);
112  set_parameter("gic.ICFGR-SGI-mask", params.icfgr_sgi_mask);
113  set_parameter("gic.ICFGR-PPI-mask", params.icfgr_ppi_mask);
114  set_parameter("gic.ICFGR-SPI-mask", params.icfgr_spi_mask);
115  set_parameter("gic.ICFGR-SGI-reset", params.icfgr_sgi_reset);
116  set_parameter("gic.ICFGR-PPI-reset", params.icfgr_ppi_reset);
117  set_parameter("gic.ICFGR-SPI-reset", params.icfgr_spi_reset);
118  set_parameter("gic.ICFGR-rsvd-bit", params.icfgr_ppi_rsvd_bit);
119  set_parameter("gic.IGROUP-SGI-mask", params.igroup_sgi_mask);
120  set_parameter("gic.IGROUP-PPI-mask", params.igroup_ppi_mask);
121  set_parameter("gic.IGROUP-SGI-reset", params.igroup_sgi_reset);
122  set_parameter("gic.IGROUP-PPI-reset", params.igroup_ppi_reset);
123  set_parameter("gic.PPI-implemented-mask", params.ppi_implemented_mask);
124  set_parameter("gic.SPI-count", params.spi_count);
125  set_parameter("gic.lockable-SPI-count", params.lockable_spi_count);
126  set_parameter("gic.IRI-ID-bits", params.iri_id_bits);
127  set_parameter("gic.delay-redistributor-accesses",
128  params.delay_redistributor_accesses);
129  set_parameter("gic.GICD_PIDR", params.gicd_pidr);
130  set_parameter("gic.GICR_PIDR", params.gicr_pidr);
131  set_parameter("gic.ITS-count", params.its_count);
132  set_parameter("gic.ITS0-base", params.its0_base);
133  set_parameter("gic.ITS1-base", params.its1_base);
134  set_parameter("gic.ITS2-base", params.its2_base);
135  set_parameter("gic.ITS3-base", params.its3_base);
136  set_parameter("gic.GITS_PIDR", params.gits_pidr);
137  set_parameter("gic.GITS_BASER0-type", params.gits_baser0_type);
138  set_parameter("gic.GITS_BASER1-type", params.gits_baser1_type);
139  set_parameter("gic.GITS_BASER2-type", params.gits_baser2_type);
140  set_parameter("gic.GITS_BASER3-type", params.gits_baser3_type);
141  set_parameter("gic.GITS_BASER4-type", params.gits_baser4_type);
142  set_parameter("gic.GITS_BASER5-type", params.gits_baser5_type);
143  set_parameter("gic.GITS_BASER6-type", params.gits_baser6_type);
144  set_parameter("gic.GITS_BASER7-type", params.gits_baser7_type);
145  set_parameter("gic.GITS_BASER0-entry-bytes",
146  params.gits_baser0_entry_bytes);
147  set_parameter("gic.GITS_BASER1-entry-bytes",
148  params.gits_baser1_entry_bytes);
149  set_parameter("gic.GITS_BASER2-entry-bytes",
150  params.gits_baser2_entry_bytes);
151  set_parameter("gic.GITS_BASER3-entry-bytes",
152  params.gits_baser3_entry_bytes);
153  set_parameter("gic.GITS_BASER4-entry-bytes",
154  params.gits_baser4_entry_bytes);
155  set_parameter("gic.GITS_BASER5-entry-bytes",
156  params.gits_baser5_entry_bytes);
157  set_parameter("gic.GITS_BASER6-entry-bytes",
158  params.gits_baser6_entry_bytes);
159  set_parameter("gic.GITS_BASER7-entry-bytes",
160  params.gits_baser7_entry_bytes);
161  set_parameter("gic.GITS_BASER0-indirect-RAZ",
162  params.gits_baser0_indirect_raz);
163  set_parameter("gic.GITS_BASER1-indirect-RAZ",
164  params.gits_baser1_indirect_raz);
165  set_parameter("gic.GITS_BASER2-indirect-RAZ",
166  params.gits_baser2_indirect_raz);
167  set_parameter("gic.GITS_BASER3-indirect-RAZ",
168  params.gits_baser3_indirect_raz);
169  set_parameter("gic.GITS_BASER4-indirect-RAZ",
170  params.gits_baser4_indirect_raz);
171  set_parameter("gic.GITS_BASER5-indirect-RAZ",
172  params.gits_baser5_indirect_raz);
173  set_parameter("gic.GITS_BASER6-indirect-RAZ",
174  params.gits_baser6_indirect_raz);
175  set_parameter("gic.GITS_BASER7-indirect-RAZ",
176  params.gits_baser7_indirect_raz);
177  set_parameter("gic.ITS-BASER-force-page-alignement",
178  params.its_baser_force_page_alignement);
179  set_parameter("gic.processor-numbers", params.processor_numbers);
180  set_parameter("gic.supports-shareability", params.supports_shareability);
181  set_parameter("gic.A3-affinity-supported", params.a3_affinity_supported);
182  set_parameter("gic.sgi-range-selector-support", params.SGI_RSS_support);
183  set_parameter("gic.GICR_PROPBASER-read-only",
184  params.gicr_propbaser_read_only);
185  set_parameter("gic.GICR_PROPBASER-reset-value",
186  params.gicr_propbaser_reset);
187  set_parameter("gic.ITS-device-bits", params.its_device_bits);
188  set_parameter("gic.ITS-entry-size", params.its_entry_size);
189  set_parameter("gic.ITS-ID-bits", params.its_id_bits);
190  set_parameter("gic.ITS-collection-ID-bits", params.its_collection_id_bits);
191  set_parameter("gic.ITS-cumulative-collection-tables",
192  params.its_cumulative_collection_tables);
193  set_parameter("gic.delay-ITS-accesses", params.delay_ITS_accesses);
194  set_parameter("gic.local-SEIs", params.local_SEIs);
195  set_parameter("gic.local-VSEIs", params.local_VSEIs);
196  set_parameter("gic.ITS-use-physical-target-addresses",
197  params.ITS_use_physical_target_addresses);
198  set_parameter("gic.ITS-hardware-collection-count",
199  params.ITS_hardware_collection_count);
200  set_parameter("gic.ITS-MOVALL-update-collections",
201  params.ITS_MOVALL_update_collections);
202  set_parameter("gic.ITS-TRANSLATE64R", params.ITS_TRANSLATE64R);
203  set_parameter("gic.enable_protocol_checking",
204  params.enable_protocol_checking);
205  set_parameter("gic.fixed-routed-spis", params.fixed_routed_spis);
206  set_parameter("gic.irouter-default-mask", params.irouter_default_mask);
207  if (params.irouter_default_reset != "") {
208  set_parameter("gic.irouter-default-reset",
209  params.irouter_default_reset);
210  }
211  if (params.irouter_reset_values != "")
212  set_parameter("gic.irouter-reset-values", params.irouter_reset_values);
213  set_parameter("gic.irouter-mask-values", params.irouter_mask_values);
214  set_parameter("gic.ITS-threaded-command-queue",
215  params.ITS_threaded_command_queue);
216  set_parameter("gic.ITS-legacy-iidr-typer-offset",
217  params.ITS_legacy_iidr_typer_offset);
218  set_parameter("gic.redistributor-threaded-sync",
219  params.redistributor_threaded_command_queue);
220  set_parameter("gic.ignore-generate-sgi-when-no-are",
221  params.ignore_generate_sgi_when_no_are);
222  set_parameter("gic.trace-speculative-lpi-property-update",
223  params.trace_speculative_lpi_property_updates);
224  set_parameter("gic.virtual-lpi-support", params.virtual_lpi_support);
225  set_parameter("gic.virtual-priority-bits", params.virtual_priority_bits);
226  set_parameter("gic.LPI-cache-type", params.LPI_cache_type);
227  set_parameter("gic.LPI-cache-check-data", params.LPI_cache_check_data);
228  set_parameter("gic.DPG-bits-implemented", params.DPG_bits_implemented);
229  set_parameter("gic.DPG-ARE-only", params.DPG_ARE_only);
230  set_parameter("gic.ARE-fixed-to-one", params.ARE_fixed_to_one);
231  set_parameter("gic.legacy-sgi-enable-rao", params.legacy_sgi_enable_rao);
232  set_parameter("gic.PA_SIZE", params.pa_size);
233  set_parameter("gic.MSI_IIDR", params.MSI_IIDR);
234  set_parameter("gic.MSI_NS-frame0-base", params.MSI_NS_frame0_base);
235  set_parameter("gic.MSI_NS-frame0-max-SPI", params.MSI_NS_frame0_max_SPI);
236  set_parameter("gic.MSI_NS-frame0-min-SPI", params.MSI_NS_frame0_min_SPI);
237  set_parameter("gic.MSI_NS-frame1-base", params.MSI_NS_frame1_base);
238  set_parameter("gic.MSI_NS-frame1-max-SPI", params.MSI_NS_frame1_max_SPI);
239  set_parameter("gic.MSI_NS-frame1-min-SPI", params.MSI_NS_frame1_min_SPI);
240  set_parameter("gic.MSI_NS-frame2-base", params.MSI_NS_frame2_base);
241  set_parameter("gic.MSI_NS-frame2-max-SPI", params.MSI_NS_frame2_max_SPI);
242  set_parameter("gic.MSI_NS-frame2-min-SPI", params.MSI_NS_frame2_min_SPI);
243  set_parameter("gic.MSI_NS-frame3-base", params.MSI_NS_frame3_base);
244  set_parameter("gic.MSI_NS-frame3-max-SPI", params.MSI_NS_frame3_max_SPI);
245  set_parameter("gic.MSI_NS-frame3-min-SPI", params.MSI_NS_frame3_min_SPI);
246  set_parameter("gic.MSI_NS-frame4-base", params.MSI_NS_frame4_base);
247  set_parameter("gic.MSI_NS-frame4-max-SPI", params.MSI_NS_frame4_max_SPI);
248  set_parameter("gic.MSI_NS-frame4-min-SPI", params.MSI_NS_frame4_min_SPI);
249  set_parameter("gic.MSI_NS-frame5-base", params.MSI_NS_frame5_base);
250  set_parameter("gic.MSI_NS-frame5-max-SPI", params.MSI_NS_frame5_max_SPI);
251  set_parameter("gic.MSI_NS-frame5-min-SPI", params.MSI_NS_frame5_min_SPI);
252  set_parameter("gic.MSI_NS-frame6-base", params.MSI_NS_frame6_base);
253  set_parameter("gic.MSI_NS-frame6-max-SPI", params.MSI_NS_frame6_max_SPI);
254  set_parameter("gic.MSI_NS-frame6-min-SPI", params.MSI_NS_frame6_min_SPI);
255  set_parameter("gic.MSI_NS-frame7-base", params.MSI_NS_frame7_base);
256  set_parameter("gic.MSI_NS-frame7-max-SPI", params.MSI_NS_frame7_max_SPI);
257  set_parameter("gic.MSI_NS-frame7-min-SPI", params.MSI_NS_frame7_min_SPI);
258  set_parameter("gic.MSI_PIDR", params.MSI_PIDR);
259  set_parameter("gic.MSI_S-frame0-base", params.MSI_S_frame0_base);
260  set_parameter("gic.MSI_S-frame0-max-SPI", params.MSI_S_frame0_max_SPI);
261  set_parameter("gic.MSI_S-frame0-min-SPI", params.MSI_S_frame0_min_SPI);
262  set_parameter("gic.MSI_S-frame1-base", params.MSI_S_frame1_base);
263  set_parameter("gic.MSI_S-frame1-max-SPI", params.MSI_S_frame1_max_SPI);
264  set_parameter("gic.MSI_S-frame1-min-SPI", params.MSI_S_frame1_min_SPI);
265  set_parameter("gic.MSI_S-frame2-base", params.MSI_S_frame2_base);
266  set_parameter("gic.MSI_S-frame2-max-SPI", params.MSI_S_frame2_max_SPI);
267  set_parameter("gic.MSI_S-frame2-min-SPI", params.MSI_S_frame2_min_SPI);
268  set_parameter("gic.MSI_S-frame3-base", params.MSI_S_frame3_base);
269  set_parameter("gic.MSI_S-frame3-max-SPI", params.MSI_S_frame3_max_SPI);
270  set_parameter("gic.MSI_S-frame3-min-SPI", params.MSI_S_frame3_min_SPI);
271  set_parameter("gic.MSI_S-frame4-base", params.MSI_S_frame4_base);
272  set_parameter("gic.MSI_S-frame4-max-SPI", params.MSI_S_frame4_max_SPI);
273  set_parameter("gic.MSI_S-frame4-min-SPI", params.MSI_S_frame4_min_SPI);
274  set_parameter("gic.MSI_S-frame5-base", params.MSI_S_frame5_base);
275  set_parameter("gic.MSI_S-frame5-max-SPI", params.MSI_S_frame5_max_SPI);
276  set_parameter("gic.MSI_S-frame5-min-SPI", params.MSI_S_frame5_min_SPI);
277  set_parameter("gic.MSI_S-frame6-base", params.MSI_S_frame6_base);
278  set_parameter("gic.MSI_S-frame6-max-SPI", params.MSI_S_frame6_max_SPI);
279  set_parameter("gic.MSI_S-frame6-min-SPI", params.MSI_S_frame6_min_SPI);
280  set_parameter("gic.MSI_S-frame7-base", params.MSI_S_frame7_base);
281  set_parameter("gic.MSI_S-frame7-max-SPI", params.MSI_S_frame7_max_SPI);
282  set_parameter("gic.MSI_S-frame7-min-SPI", params.MSI_S_frame7_min_SPI);
283  set_parameter("gic.outer-cacheability-support",
284  params.outer_cacheability_support);
285  set_parameter("gic.wakeup-on-reset", params.wakeup_on_reset);
286  set_parameter("gic.SPI-message-based-support", params.SPI_MBIS);
287  set_parameter("gic.SPI-unimplemented", params.SPI_unimplemented);
288  set_parameter("gic.IROUTER-IRM-RAZ-WI", params.irm_razwi);
289  set_parameter("gic.common-lpi-configuration",
290  params.common_LPI_configuration);
291  set_parameter("gic.single-set-support", params.single_set_support);
292  set_parameter("gic.has_mpam", params.has_mpam);
293  set_parameter("gic.mpam_partid_max", params.mpam_max_partid);
294  set_parameter("gic.mpam_pmg_max", params.mpam_max_pmg);
295  set_parameter("gic.output_attributes", params.output_attributes);
296  set_parameter("gic.has_VPENDBASER-dirty-flag-on-load",
297  params.has_DirtyVLPIOnLoad);
298  set_parameter("gic.allow-LPIEN-clear", params.allow_LPIEN_clear);
299  set_parameter("gic.GICD-legacy-registers-as-reserved",
300  params.GICD_legacy_reg_reserved);
301  set_parameter("gic.extended-spi-count", params.extended_spi_count);
302  set_parameter("gic.extended-ppi-count", params.extended_ppi_count);
303  set_parameter("gic.consolidators", params.consolidators);
304 }
305 
306 Port &
307 SCGIC::gem5_getPort(const std::string &if_name, int idx)
308 {
309  if (if_name == "reset") {
310  return resetPort;
311  } else if (if_name == "po_reset") {
312  return poResetPort;
313  } else {
314  return scx_evs_GIC::gem5_getPort(if_name, idx);
315  }
316 }
317 
318 void
320 {
321  scx_evs_GIC::before_end_of_elaboration();
322  terminator.reset(new Terminator("terminator", redistributor));
323 }
324 
325 GIC::GIC(const FastModelGICParams &params) :
326  BaseGic(params),
327  ambaM(params.sc_gic->amba_m, params.name + ".amba_m", -1),
328  ambaS(params.sc_gic->amba_s, params.name + ".amba_s", -1),
329  redistributors(params.port_redistributor_connection_count),
330  scGIC(params.sc_gic)
331 {
332  for (int i = 0; i < params.port_wake_request_connection_count; i++) {
333  wakeRequestPorts.emplace_back(new IntSourcePin<GIC>(
334  csprintf("%s.wakerequestport[%d]", name(), i), i, this));
335  auto handler = [this, i](bool status)
336  {
337  auto &port = wakeRequestPorts[i];
338  status ? port->raise() : port->lower();
339  };
340  scGIC->wakeRequests[i]->onChange(handler);
341  }
342 }
343 
344 Port &
345 GIC::getPort(const std::string &if_name, PortID idx)
346 {
347  if (if_name == "amba_m") {
348  return ambaM;
349  } else if (if_name == "amba_s") {
350  return ambaS;
351  } else if (if_name == "redistributor") {
352  auto &ptr = redistributors.at(idx);
353  if (!ptr) {
354  ptr.reset(new TlmGicInitiator(scGIC->redistributor[idx],
355  csprintf("%s.redistributor[%d]",
356  name(), idx), idx));
357  }
358  return *ptr;
359  } else if (if_name == "wake_request") {
360  return *wakeRequestPorts.at(idx);
361  } else if (if_name == "reset" || if_name == "po_reset") {
362  return scGIC->gem5_getPort(if_name, idx);
363  } else {
364  return BaseGic::getPort(if_name, idx);
365  }
366 }
367 
368 void
369 GIC::sendInt(uint32_t num)
370 {
371  scGIC->signalInterrupt->spi(num - 32, true);
372 }
373 
374 void
375 GIC::clearInt(uint32_t num)
376 {
377  scGIC->signalInterrupt->spi(num - 32, false);
378 }
379 
380 void
381 GIC::sendPPInt(uint32_t num, uint32_t cpu)
382 {
383  scGIC->signalInterrupt->ppi(cpu, num, true);
384 }
385 
386 void
387 GIC::clearPPInt(uint32_t num, uint32_t cpu)
388 {
389  scGIC->signalInterrupt->ppi(cpu, num, false);
390 }
391 
392 bool
394 {
395  if (scGIC->params().gicv2_only)
396  return version == GicVersion::GIC_V2;
397  return (version == GicVersion::GIC_V3) ||
398  (version == GicVersion::GIC_V4 && scGIC->params().has_gicv4_1);
399 }
400 
401 } // namespace fastmodel
402 } // namespace gem5
gem5::PortID
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
Definition: types.hh:245
gem5::fastmodel::GIC::ambaS
AmbaTarget ambaS
Definition: gic.hh:127
gem5::fastmodel::GIC::wakeRequestPorts
std::vector< std::unique_ptr< IntSourcePin< GIC > > > wakeRequestPorts
Definition: gic.hh:129
gem5::fastmodel::SCGIC::SCGIC
SCGIC(const SCFastModelGICParams &p)
Definition: gic.hh:92
data
const char data[]
Definition: circlebuf.test.cc:48
gem5::fastmodel::GIC::sendInt
void sendInt(uint32_t num) override
Post an interrupt from a device that is connected to the GIC.
Definition: gic.cc:369
gem5::fastmodel::SCGIC::gem5_getPort
Port & gem5_getPort(const std::string &if_name, int idx) override
Definition: gic.cc:307
gem5::fastmodel::SCGIC::before_end_of_elaboration
void before_end_of_elaboration() override
Definition: gic.cc:319
sc_core
Definition: messages.cc:31
gem5::BaseGic::GicVersion::GIC_V3
@ GIC_V3
gem5::fastmodel::SCGIC::signalInterrupt
SignalInterruptInitiatorSocket signalInterrupt
Definition: gic.hh:97
gem5::fastmodel::GIC::scGIC
SCGIC * scGIC
Definition: gic.hh:131
gem5::fastmodel::GIC::getPort
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a port with a given name and index.
Definition: gic.cc:345
gem5::csprintf
std::string csprintf(const char *format, const Args &...args)
Definition: cprintf.hh:161
gem5::BaseGic::GicVersion::GIC_V4
@ GIC_V4
sc_core::sc_vector
Definition: sc_vector.hh:158
gem5::ArmISA::i
Bitfield< 7 > i
Definition: misc_types.hh:67
gic.hh
gem5::fastmodel::GIC::sendPPInt
void sendPPInt(uint32_t num, uint32_t cpu) override
Interface call for private peripheral interrupts.
Definition: gic.cc:381
gem5::fastmodel::GIC::clearInt
void clearInt(uint32_t num) override
Clear an interrupt from a device that is connected to the GIC.
Definition: gic.cc:375
gem5::fastmodel::SCGIC::resetPort
SignalSender resetPort
Definition: gic.hh:100
gem5::fastmodel::GIC::supportsVersion
bool supportsVersion(GicVersion version) override
Check if version supported.
Definition: gic.cc:393
gem5::BaseGic
Definition: base_gic.hh:72
gem5::fastmodel::SignalSender::signal_out
amba_pv::signal_master_port< bool > signal_out
Definition: signal_sender.hh:47
gem5::Named::name
virtual std::string name() const
Definition: named.hh:47
gem5::X86ISA::count
count
Definition: misc.hh:710
len
uint16_t len
Definition: helpers.cc:62
sc_core::sc_module_name
Definition: sc_module_name.hh:41
gem5::BaseGic::params
const Params & params() const
Definition: base_gic.cc:78
gem5::fastmodel::GIC::redistributors
std::vector< std::unique_ptr< TlmGicInitiator > > redistributors
Definition: gic.hh:128
gem5::IntSourcePinBase
Definition: intpin.hh:77
gem5::fastmodel::SCGIC::Terminator::targets
Targets targets
Definition: gic.hh:77
name
const std::string & name()
Definition: trace.cc:48
gem5::fastmodel::GIC::GIC
GIC(const FastModelGICParams &params)
Definition: gic.cc:325
gem5::BaseGic::GicVersion
GicVersion
Definition: base_gic.hh:76
gem5::fastmodel::SCGIC::Terminator::countUnbound
static int countUnbound(const Initiators &inits)
Definition: gic.cc:41
tlm::tlm_base_initiator_socket::bind
virtual void bind(base_target_socket_type &s)
Definition: initiator_socket.hh:121
gem5::Port
Ports are used to interface objects to each other.
Definition: port.hh:61
gem5::fastmodel::SCGIC::Terminator::Terminator
Terminator(sc_core::sc_module_name _name, Initiators &inits)
Definition: gic.cc:50
gem5::fastmodel::GIC::TlmGicInitiator
sc_gem5::TlmInitiatorBaseWrapper< 64, svp_gicv3_comms::gicv3_comms_fw_if, svp_gicv3_comms::gicv3_comms_bw_if, 1, sc_core::SC_ONE_OR_MORE_BOUND > TlmGicInitiator
Definition: gic.hh:124
sc_core::sc_vector::at
T & at(size_type index)
Definition: sc_vector.hh:498
gem5::statistics::init
const FlagsType init
This Stat is Initialized.
Definition: info.hh:55
trace.hh
gem5::fastmodel::SCGIC::Terminator
Definition: gic.hh:68
gem5::fastmodel::SCGIC::wakeRequests
std::vector< std::unique_ptr< SignalReceiver > > wakeRequests
Definition: gic.hh:99
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::fastmodel::GIC::ambaM
AmbaInitiator ambaM
Definition: gic.hh:126
gem5::BaseGic::GicVersion::GIC_V2
@ GIC_V2
gem5::fastmodel::SCGIC::Terminator::sendTowardsCPU
void sendTowardsCPU(uint8_t len, const uint8_t *data) override
Definition: gic.cc:68
gem5::fastmodel::SignalReceiver
Definition: signal_receiver.hh:50
gem5::fastmodel::SCGIC::poResetPort
SignalSender poResetPort
Definition: gic.hh:101
gem5::fastmodel::SCGIC::terminator
std::unique_ptr< Terminator > terminator
Definition: gic.hh:88
gem5::fastmodel::GIC::clearPPInt
void clearPPInt(uint32_t num, uint32_t cpu) override
Definition: gic.cc:387
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:188
gem5::ArmISA::status
Bitfield< 5, 0 > status
Definition: misc_types.hh:480
gem5::fastmodel::SCGIC::_params
const SCFastModelGICParams & _params
Definition: gic.hh:89
gem5::PioDevice::getPort
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a port with a given name and index.
Definition: io_device.cc:67

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