Gabe Black has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/67575?usp=email )
Change subject: fastmodel: Export the reset signals of the GIC.
......................................................................
fastmodel: Export the reset signals of the GIC.
These are the "reset" and "po_reset" lines. It seems reasonable that
these are the normal reset and the power on reset signals, but that's
not spelled out in the fast model "lisa" file, nor does it explain
exactly what the difference is between them.
Change-Id: I686b4d973fc3cfff8a3ec05f8c95ee2cb6ff6698
---
M src/arch/arm/fastmodel/GIC/FastModelGIC.py
M src/arch/arm/fastmodel/GIC/GIC.lisa
M src/arch/arm/fastmodel/GIC/gic.cc
M src/arch/arm/fastmodel/GIC/gic.hh
4 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/src/arch/arm/fastmodel/GIC/FastModelGIC.py
b/src/arch/arm/fastmodel/GIC/FastModelGIC.py
index ce0a8c5..24ab660 100644
--- a/src/arch/arm/fastmodel/GIC/FastModelGIC.py
+++ b/src/arch/arm/fastmodel/GIC/FastModelGIC.py
@@ -42,6 +42,7 @@
from m5.objects.FastModel import AmbaInitiatorSocket, AmbaTargetSocket
from m5.objects.Gic import BaseGic
from m5.objects.IntPin import VectorIntSourcePin
+from m5.objects.ResetPort import ResetResponsePort
from m5.objects.SystemC import SystemC_ScModule
GICV3_COMMS_TARGET_ROLE = "GICV3 COMMS TARGET"
@@ -850,6 +851,9 @@
wake_request = VectorIntSourcePin("GIC wake request initiator")
+ reset = ResetResponsePort('Reset')
+ po_reset = ResetResponsePort('Power on reset')
+
# Used for DTB autogeneration
_state = FdtState(addr_cells=2, size_cells=2, interrupt_cells=3)
diff --git a/src/arch/arm/fastmodel/GIC/GIC.lisa
b/src/arch/arm/fastmodel/GIC/GIC.lisa
index 34b09c8..5443b55 100644
--- a/src/arch/arm/fastmodel/GIC/GIC.lisa
+++ b/src/arch/arm/fastmodel/GIC/GIC.lisa
@@ -56,6 +56,10 @@
// Outgoing wake requests.
gic.wake_request => self.wake_request;
+ // Reset signals.
+ self.normal_reset => gic.reset;
+ self.po_reset => gic.po_reset;
+
// Internal ports for PPI and SPI programmatic access.
self.ppi_0 => gic.ppi_in_0;
self.ppi_1 => gic.ppi_in_1;
@@ -405,6 +409,9 @@
}
}
+ slave port<Signal> normal_reset;
+ slave port<Signal> po_reset;
+
internal slave port<Signal> spi[988];
internal slave port<Signal> ppi_0[16];
diff --git a/src/arch/arm/fastmodel/GIC/gic.cc
b/src/arch/arm/fastmodel/GIC/gic.cc
index 493aa81..5f01cfb 100644
--- a/src/arch/arm/fastmodel/GIC/gic.cc
+++ b/src/arch/arm/fastmodel/GIC/gic.cc
@@ -72,10 +72,15 @@
SCGIC::SCGIC(const SCFastModelGICParams ¶ms,
sc_core::sc_module_name _name)
- : scx_evs_GIC(_name), _params(params)
+ : scx_evs_GIC(_name), _params(params),
+ resetPort(params.name + ".reset", 0),
+ poResetPort(params.name + ".po_reset", 0)
{
signalInterrupt.bind(signal_interrupt);
+ resetPort.signal_out.bind(scx_evs_GIC::normal_reset);
+ poResetPort.signal_out.bind(scx_evs_GIC::po_reset);
+
for (int i = 0; i < wake_request.size(); i++) {
wakeRequests.emplace_back(
new SignalReceiver(csprintf("%s.wakerequest[%d]", name(), i)));
@@ -298,6 +303,18 @@
set_parameter("gic.consolidators", params.consolidators);
}
+Port &
+SCGIC::gem5_getPort(const std::string &if_name, int idx)
+{
+ if (if_name == "reset") {
+ return resetPort;
+ } else if (if_name == "po_reset") {
+ return poResetPort;
+ } else {
+ return scx_evs_GIC::gem5_getPort(if_name, idx);
+ }
+}
+
void
SCGIC::before_end_of_elaboration()
{
@@ -341,6 +358,8 @@
return *ptr;
} else if (if_name == "wake_request") {
return *wakeRequestPorts.at(idx);
+ } else if (if_name == "reset" || if_name == "po_reset") {
+ return scGIC->gem5_getPort(if_name, idx);
} else {
return BaseGic::getPort(if_name, idx);
}
diff --git a/src/arch/arm/fastmodel/GIC/gic.hh
b/src/arch/arm/fastmodel/GIC/gic.hh
index 0e502fc..070fe3b 100644
--- a/src/arch/arm/fastmodel/GIC/gic.hh
+++ b/src/arch/arm/fastmodel/GIC/gic.hh
@@ -37,6 +37,7 @@
#include "arch/arm/fastmodel/amba_ports.hh"
#include "arch/arm/fastmodel/common/signal_receiver.hh"
+#include "arch/arm/fastmodel/common/signal_sender.hh"
#include "dev/arm/base_gic.hh"
#include "dev/intpin.hh"
#include "params/FastModelGIC.hh"
@@ -91,9 +92,13 @@
SCGIC(const SCFastModelGICParams &p) : SCGIC(p, p.name.c_str()) {}
SCGIC(const SCFastModelGICParams ¶ms, sc_core::sc_module_name
_name);
+ Port &gem5_getPort(const std::string &if_name, int idx) override;
+
SignalInterruptInitiatorSocket signalInterrupt;
std::vector<std::unique_ptr<SignalReceiver>> wakeRequests;
+ SignalSender resetPort;
+ SignalSender poResetPort;
void before_end_of_elaboration() override;
--
To view, visit
https://gem5-review.googlesource.com/c/public/gem5/+/67575?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I686b4d973fc3cfff8a3ec05f8c95ee2cb6ff6698
Gerrit-Change-Number: 67575
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <gabe.bl...@gmail.com>
Gerrit-CC: Gabe Black <gabebl...@google.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org