fastmodel: CortexA76 implements setResetAddr interface
Change-Id: I3612a62e2145d3442f01a69b21954fc00dd5ade9
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/53327
Maintainer: Bobby Bruce <bbruce@ucdavis.edu>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Earl Ou <shunhsingou@google.com>
diff --git a/src/arch/arm/fastmodel/CortexA76/cortex_a76.cc b/src/arch/arm/fastmodel/CortexA76/cortex_a76.cc
index e9b468d..e77e734 100644
--- a/src/arch/arm/fastmodel/CortexA76/cortex_a76.cc
+++ b/src/arch/arm/fastmodel/CortexA76/cortex_a76.cc
@@ -95,6 +95,12 @@
set_evs_param("vfp-enable_at_reset", params().vfp_enable_at_reset);
}
+void
+CortexA76::setResetAddr(Addr addr, bool secure)
+{
+ evs_base_cpu->setResetAddr(num, addr, secure);
+}
+
Port &
CortexA76::getPort(const std::string &if_name, PortID idx)
{
diff --git a/src/arch/arm/fastmodel/CortexA76/cortex_a76.hh b/src/arch/arm/fastmodel/CortexA76/cortex_a76.hh
index 79d9eee..39f916e 100644
--- a/src/arch/arm/fastmodel/CortexA76/cortex_a76.hh
+++ b/src/arch/arm/fastmodel/CortexA76/cortex_a76.hh
@@ -74,6 +74,8 @@
void setCluster(CortexA76Cluster *_cluster, int _num);
+ void setResetAddr(Addr addr, bool secure = false) override;
+
Port &getPort(const std::string &if_name,
PortID idx=InvalidPortID) override;
};
diff --git a/src/arch/arm/fastmodel/CortexA76/evs.cc b/src/arch/arm/fastmodel/CortexA76/evs.cc
index 4b25014..935d139 100644
--- a/src/arch/arm/fastmodel/CortexA76/evs.cc
+++ b/src/arch/arm/fastmodel/CortexA76/evs.cc
@@ -67,7 +67,7 @@
void
ScxEvsCortexA76<Types>::setResetAddr(int core, Addr addr, bool secure)
{
- panic("Not implemented for A76.");
+ this->rvbaraddr[core]->set_state(0, addr);
}
template <class Types>
@@ -91,6 +91,8 @@
new SignalReceiver(csprintf("vcpumntirq[%d]", i)));
cntpnsirq.emplace_back(
new SignalReceiver(csprintf("cntpnsirq[%d]", i)));
+ rvbaraddr.emplace_back(new SignalInitiator<uint64_t>(
+ csprintf("rvbaraddr[%d]", i).c_str()));
Base::cnthpirq[i].bind(cnthpirq[i]->signal_in);
Base::cnthvirq[i].bind(cnthvirq[i]->signal_in);
@@ -101,6 +103,7 @@
Base::pmuirq[i].bind(pmuirq[i]->signal_in);
Base::vcpumntirq[i].bind(vcpumntirq[i]->signal_in);
Base::cntpnsirq[i].bind(cntpnsirq[i]->signal_in);
+ rvbaraddr[i]->bind(Base::rvbaraddr[i]);
}
clockRateControl.bind(this->clock_rate_s);
diff --git a/src/arch/arm/fastmodel/CortexA76/evs.hh b/src/arch/arm/fastmodel/CortexA76/evs.hh
index 37f8363..7c834d0 100644
--- a/src/arch/arm/fastmodel/CortexA76/evs.hh
+++ b/src/arch/arm/fastmodel/CortexA76/evs.hh
@@ -69,10 +69,13 @@
ClockRateControlInitiatorSocket clockRateControl;
ClockRateControlInitiatorSocket periphClockRateControl;
- typedef sc_gem5::TlmTargetBaseWrapper<
+ using TlmGicTarget = sc_gem5::TlmTargetBaseWrapper<
64, svp_gicv3_comms::gicv3_comms_fw_if,
svp_gicv3_comms::gicv3_comms_bw_if, 1,
- sc_core::SC_ONE_OR_MORE_BOUND> TlmGicTarget;
+ sc_core::SC_ONE_OR_MORE_BOUND>;
+
+ template <typename T>
+ using SignalInitiator = amba_pv::signal_master_port<T>;
AmbaInitiator amba;
std::vector<std::unique_ptr<TlmGicTarget>> redist;
@@ -86,6 +89,7 @@
std::vector<std::unique_ptr<SignalReceiver>> pmuirq;
std::vector<std::unique_ptr<SignalReceiver>> vcpumntirq;
std::vector<std::unique_ptr<SignalReceiver>> cntpnsirq;
+ std::vector<std::unique_ptr<SignalInitiator<uint64_t>>> rvbaraddr;
CortexA76Cluster *gem5CpuCluster;
diff --git a/src/arch/arm/fastmodel/CortexA76/x1/x1.lisa b/src/arch/arm/fastmodel/CortexA76/x1/x1.lisa
index 04dae41..b83efc6 100644
--- a/src/arch/arm/fastmodel/CortexA76/x1/x1.lisa
+++ b/src/arch/arm/fastmodel/CortexA76/x1/x1.lisa
@@ -57,6 +57,9 @@
core.pmuirq => self.pmuirq;
core.vcpumntirq => self.vcpumntirq;
+ // Core reset addrs.
+ self.rvbaraddr => core.rvbaraddr;
+
// Clocks.
clock1Hz.clk_out => clockDiv.clk_in;
clock1Hz.clk_out => clockDivPeriph.clk_in;
@@ -96,4 +99,5 @@
master port<Signal> pmuirq[1];
master port<Signal> vcpumntirq[1];
master port<Signal> cntpnsirq[1];
+ slave port<Value_64> rvbaraddr[1];
}
diff --git a/src/arch/arm/fastmodel/CortexA76/x2/x2.lisa b/src/arch/arm/fastmodel/CortexA76/x2/x2.lisa
index 0279140..4ab0b07 100644
--- a/src/arch/arm/fastmodel/CortexA76/x2/x2.lisa
+++ b/src/arch/arm/fastmodel/CortexA76/x2/x2.lisa
@@ -57,6 +57,9 @@
core.pmuirq => self.pmuirq;
core.vcpumntirq => self.vcpumntirq;
+ // Core reset addrs.
+ self.rvbaraddr => core.rvbaraddr;
+
// Clocks.
clock1Hz.clk_out => clockDiv.clk_in;
clock1Hz.clk_out => clockDivPeriph.clk_in;
@@ -96,4 +99,5 @@
master port<Signal> pmuirq[2];
master port<Signal> vcpumntirq[2];
master port<Signal> cntpnsirq[2];
+ slave port<Value_64> rvbaraddr[2];
}
diff --git a/src/arch/arm/fastmodel/CortexA76/x3/x3.lisa b/src/arch/arm/fastmodel/CortexA76/x3/x3.lisa
index b18b102..7625769 100644
--- a/src/arch/arm/fastmodel/CortexA76/x3/x3.lisa
+++ b/src/arch/arm/fastmodel/CortexA76/x3/x3.lisa
@@ -57,6 +57,9 @@
core.pmuirq => self.pmuirq;
core.vcpumntirq => self.vcpumntirq;
+ // Core reset addrs.
+ self.rvbaraddr => core.rvbaraddr;
+
// Clocks.
clock1Hz.clk_out => clockDiv.clk_in;
clock1Hz.clk_out => clockDivPeriph.clk_in;
@@ -96,4 +99,5 @@
master port<Signal> pmuirq[3];
master port<Signal> vcpumntirq[3];
master port<Signal> cntpnsirq[3];
+ slave port<Value_64> rvbaraddr[3];
}
diff --git a/src/arch/arm/fastmodel/CortexA76/x4/x4.lisa b/src/arch/arm/fastmodel/CortexA76/x4/x4.lisa
index c7f1cb2..3e67719 100644
--- a/src/arch/arm/fastmodel/CortexA76/x4/x4.lisa
+++ b/src/arch/arm/fastmodel/CortexA76/x4/x4.lisa
@@ -57,6 +57,9 @@
core.pmuirq => self.pmuirq;
core.vcpumntirq => self.vcpumntirq;
+ // Core reset addrs.
+ self.rvbaraddr => core.rvbaraddr;
+
// Clocks.
clock1Hz.clk_out => clockDiv.clk_in;
clock1Hz.clk_out => clockDivPeriph.clk_in;
@@ -96,4 +99,5 @@
master port<Signal> pmuirq[4];
master port<Signal> vcpumntirq[4];
master port<Signal> cntpnsirq[4];
+ slave port<Value_64> rvbaraddr[4];
}